package com.silence.gmall.product.controller;

import com.silence.gmall.annotations.Log;
import com.silence.gmall.base.Result;
import com.silence.gmall.product.domain.repository.BaseAttrInfoRepository;
import com.silence.gmall.product.dto.BaseAttrInfoDto;
import com.silence.gmall.product.dto.BaseAttrValueDto;
import com.silence.gmall.product.service.BaseAttrInfoService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @Author silence
 * @Description 属性表控制器
 * @Date 2025-08-17 16:28:16
 */
@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/admin/product")
public class BaseAttrController {

    /**
     * BaseAttrInfoService 的注入
     */
    private final BaseAttrInfoService baseAttrInfoService;

    /**
     * BaseAttrInfoRepository 的注入
     */
    private final BaseAttrInfoRepository baseAttrInfoRepository;

    /**
     * 根据分类id获取平台属性
     *
     * @param category1Id 一级分类id
     * @param category2Id 二级分类id
     * @param category3Id 三级分类id
     * @return 平台属性列表
     */
    @GetMapping("/attrInfoList/{category1Id}/{category2Id}/{category3Id}")
    @Log(interfaceName = "根据分类id获取平台属性")
    public Result<List<BaseAttrInfoDto>> getAttrInfoList(@PathVariable("category1Id") Long category1Id,
                                                         @PathVariable("category2Id") Long category2Id,
                                                         @PathVariable("category3Id") Long category3Id) {
        return Result.build(baseAttrInfoRepository.listAttrInfoJoinAttrValue(category1Id, category2Id, category3Id));
    }

    /**
     * 根据平台属性ID获取平台属性对象数据
     *
     * @param attrId 平台属性ID
     * @return 平台属性对象数据
     */
    @GetMapping("/getAttrValueList/{attrId}")
    @Log(interfaceName = "根据平台属性ID获取平台属性对象数据")
    public Result<List<BaseAttrValueDto>> getAttrValueList(@PathVariable("attrId") String attrId) {
        return Result.build(baseAttrInfoService.getAttrValueList(attrId));
    }

    /**
     * 添加修改平台属性
     *
     * @param reqVo 添加修改平台属性请求对象
     * @return 添加修改平台属性结果
     */
    @PostMapping("/saveAttrInfo")
    @Log(interfaceName = "添加修改平台属性")
    public Result<Void> saveOrUpdateAttrInfo(@RequestBody BaseAttrInfoDto reqVo) {
        baseAttrInfoService.saveOrUpdateAttrInfo(reqVo);
        return Result.build();
    }

}